import json
import sys
import time

import facade
from parsel import Selector
from xjlibrary.our_file_dir import BaseDir

curpath = BaseDir.get_file_dir_absolute(__file__)
logspath = BaseDir.get_new_path(curpath, "logs")
rootDir = BaseDir.get_upper_dir(curpath, -2)
searchDir = BaseDir.get_new_path(rootDir, "download", "wanfag_cg", "download", "search")
BaseDir.create_dir(searchDir)


class Search():
    def __init__(self):
        self.url = "http://www.wanfangdata.com.cn/search/searchList.do?searchType=tech_result&searchWord={}"
        self.yearset = set()

        # all: 812486
        self.list = ["学科:马克思主义、列宁主义、毛泽东思想、邓小平理论", "学科:哲学、宗教", "学科:综合性图书", "学科:自然科学总论", "学科:数理科学和化学", "学科:天文学、地球科学",
                     "学科:生物科学", "学科:医学、卫生", "学科:农业科学", "学科:工业技术", "学科:交通运输", "学科:航空、航天", "学科:环境科学、安全科学", "学科:社会科学总论",
                     "学科:政治、法律", "学科:军事", "学科:经济", "学科:文化、科学、教育、体育", "学科:语言、文字", "学科:文学", "学科:艺术", "学科:历史、地理"]
        # all :779450
        self.list2 = ["地区:安徽", "地区:北京", "地区:重庆", "地区:福建", "地区:甘肃", "地区:广东", "地区:广西", "地区:贵州", "地区:海南", "地区:河北", "地区:河南",
                      "地区:黑龙江", "地区:湖北", "地区:湖南", "地区:吉林", "地区:江苏", "地区:江西", "地区:辽宁", "地区:内蒙古", "地区:宁夏", "地区:青海",
                      "地区:山东", "地区:山西", "地区:陕西", "地区:上海", "地区:四川", "地区:天津", "地区:西藏", "地区:新疆", "地区:云南", "地区:浙江"]
        # 905325
        self.list3 = ["行业:电信和其他信息传输服务业", "行业:计算机服务业", "行业:软件业", "行业:批发业", "行业:零售业", "行业:新闻出版业", "行业:广播、电视、电影和音像业",
                      "行业:文化艺术业", "行业:体育", "行业:娱乐业", "行业:中国共产党机关", "行业:国家机构", "行业:人民政协和民主党派", "行业:群众团体、社会团体和宗教组织",
                      "行业:基层群众自治组织", "行业:住宿业", "行业:餐饮业", "行业:银行业", "行业:证券业", "行业:保险业", "行业:其他金融活动", "行业:房地产业", "行业:租赁业",
                      "行业:商务服务业", "行业:研究与试验发展", "行业:专业技术服务业", "行业:科技交流和推广服务业", "行业:地质勘查业", "行业:水利管理业", "行业:环境管理业",
                      "行业:公共设施管理业", "行业:居民服务业", "行业:其他服务业", "行业:教育", "行业:社会福利业", "行业:卫生", "行业:社会保障业", "行业:电力、热力的生产和供应业",
                      "行业:燃气生产和供应业", "行业:水的生产和供应业", "行业:房屋和土木工程建筑业", "行业:建筑安装业", "行业:建筑装饰业", "行业:其他建筑业",
                      "行业:装卸搬运和其他运输服务业", "行业:仓储业", "行业:邮政业", "行业:铁路运输业", "行业:道路运输业", "行业:城市公共交通业", "行业:水上运输业",
                      "行业:航空运输业", "行业:管道运输业", "行业:农业", "行业:林业", "行业:畜牧业", "行业:渔业", "行业:农、林、牧、渔服务业", "行业:煤炭开采和洗选业",
                      "行业:石油和天然气开采业", "行业:黑色金属矿采选业", "行业:有色金属矿采选业", "行业:非金属矿采选业", "行业:其他采矿业", "行业:饮料制造业", "行业:通用设备制造业",
                      "行业:专用设备制造业", "行业:烟草制品业", "行业:纺织业", "行业:纺织服装、鞋、帽制造业", "行业:有色金属冶炼及压延加工业", "行业:金属制品业",
                      "行业:交通运输设备制造业", "行业:电气机械及器材制造业", "行业:通信设备、计算机及其他电子设备制造业", "行业:仪器仪表及文化、办公用机械制造业", "行业:工艺品及其他制造业",
                      "行业:废弃资源和废旧材料回收加工业", "行业:农副食品加工业", "行业:食品制造业", "行业:皮革、毛皮、羽毛(绒)及其制品业", "行业:木材加工及木、竹、藤、棕、草制品业",
                      "行业:家具制造业", "行业:造纸及纸制品业", "行业:印刷业和记录媒介的复制", "行业:文教体育用品制造业", "行业:石油加工、炼焦及核燃料加工业",
                      "行业:化学原料及化学制品制造业", "行业:医药制造业", "行业:化学纤维制造业", "行业:橡胶制品业", "行业:塑料制品业", "行业:非金属矿物制品业",
                      "行业:黑色金属冶炼及压延加工业"]
        # all :915981
        self.list4 = ["行业:电信", "行业:互联网信息服务", "行业:广播电视传输服务", "行业:卫星传输服务", "行业:计算机系统服务", "行业:数据处理", "行业:计算机维修",
                      "行业:其他计算机服务", "行业:公共软件服务", "行业:其他软件服务", "行业:农畜产品批发", "行业:食品、饮料及烟草制品批发", "行业:纺织、服装及日用品批发",
                      "行业:文化、体育用品及器材批发", "行业:医药及医疗器材批发", "行业:其他批发", "行业:矿产品、建材及化工产品批发", "行业:机械设备、五金交电及电子产品批发",
                      "行业:贸易经纪与代理", "行业:纺织、服装及日用品专门零售", "行业:综合零售", "行业:食品、饮料及烟草制品专门零售", "行业:文化、体育用品及器材专门零售",
                      "行业:医药及医疗器材专门零售", "行业:汽车、摩托车、燃料及零配件专门零售", "行业:家用电器及电子产品专门零售", "行业:五金、家具及室内装修材料专门零售",
                      "行业:无店铺及其他零售", "行业:新闻业", "行业:出版业", "行业:广播", "行业:电视", "行业:电影", "行业:音像制作", "行业:文艺创作与表演",
                      "行业:艺术表演场馆", "行业:图书馆与档案馆", "行业:文物及文化保护", "行业:博物馆", "行业:烈士陵园、纪念馆", "行业:群众文化活动", "行业:文化艺术经纪代理",
                      "行业:其他文化艺术", "行业:体育组织", "行业:体育场馆", "行业:其他体育", "行业:室内娱乐活动", "行业:游乐园", "行业:休闲健身娱乐活动", "行业:其他娱乐活动",
                      "行业:中国共产党机关", "行业:国家权力机构", "行业:国家行政机构", "行业:人民法院和人民检察院", "行业:其他国家机构", "行业:人民政协", "行业:民主党派",
                      "行业:群众团体", "行业:社会团体", "行业:宗教组织", "行业:社区自治组织", "行业:村民自治组织", "行业:旅游饭店", "行业:一般旅馆", "行业:其他住宿服务",
                      "行业:正餐服务", "行业:快餐服务", "行业:饮料及冷饮服务", "行业:其他餐饮服务", "行业:中央银行", "行业:商业银行", "行业:其他银行", "行业:证券市场管理",
                      "行业:证券经纪与交易", "行业:证券投资", "行业:证券分析与咨询", "行业:人寿保险", "行业:非人寿保险", "行业:保险辅助服务", "行业:金融信托与管理",
                      "行业:金融租赁", "行业:财务公司", "行业:邮政储蓄", "行业:典当", "行业:其他未列明的金融活动", "行业:房地产开发经营", "行业:物业管理", "行业:房地产中介服务",
                      "行业:其他房地产活动", "行业:机械设备租赁", "行业:文化及日用品出租", "行业:企业管理服务", "行业:法律服务", "行业:咨询与调查", "行业:广告业",
                      "行业:知识产权服务", "行业:职业中介服务", "行业:市场管理", "行业:旅行社", "行业:其他商务服务", "行业:自然科学研究与试验发展", "行业:工程和技术研究与试验发展",
                      "行业:农业科学研究与试验发展", "行业:医学研究与试验发展", "行业:社会人文科学研究与试验发展", "行业:气象服务", "行业:地震服务", "行业:海洋服务", "行业:测绘服务",
                      "行业:技术检测", "行业:环境监测", "行业:工程技术与规划管理", "行业:其他专业技术服务", "行业:技术推广服务", "行业:科技中介服务", "行业:其他科技服务",
                      "行业:矿产地质勘查", "行业:基础地质勘查", "行业:地质勘查技术服务", "行业:防洪管理", "行业:水资源管理", "行业:其他水利管理", "行业:自然保护", "行业:环境治理",
                      "行业:市政公共设施管理", "行业:城市绿化管理", "行业:游览景区管理", "行业:家庭服务", "行业:托儿所", "行业:洗染服务", "行业:理发及美容保健服务",
                      "行业:洗浴服务", "行业:婚姻服务", "行业:殡葬服务", "行业:摄影扩印服务", "行业:其他居民服务", "行业:修理与维护", "行业:清洁服务", "行业:其他未列明的服务",
                      "行业:学前教育", "行业:初等教育", "行业:中等教育", "行业:高等教育", "行业:其他教育", "行业:提供住宿的社会福利", "行业:不提供住宿的社会福利", "行业:医院",
                      "行业:卫生院及社区医疗活动", "行业:门诊部医疗活动", "行业:计划生育技术服务活动", "行业:妇幼保健活动", "行业:专科疾病防治活动", "行业:疾病预防控制及防疫活动",
                      "行业:其他卫生活动", "行业:社会保障业", "行业:电力生产", "行业:电力供应", "行业:热力生产和供应", "行业:燃气生产和供应业", "行业:自来水的生产和供应",
                      "行业:污水处理及其再生利用", "行业:其他水的处理、利用与分配", "行业:房屋工程建筑", "行业:土木工程建筑", "行业:建筑安装业", "行业:建筑装饰业", "行业:工程准备",
                      "行业:提供施工设备服务", "行业:其他未列明的建筑活动", "行业:装卸搬运", "行业:运输代理服务", "行业:谷物、棉花等农产品仓储", "行业:其他仓储", "行业:国家邮政",
                      "行业:其他寄递服务", "行业:铁路旅客运输", "行业:铁路货物运输", "行业:铁路运输辅助活动", "行业:公路旅客运输", "行业:道路货物运输", "行业:道路运输辅助活动",
                      "行业:公共电汽车客运", "行业:轨道交通", "行业:出租车客运", "行业:城市轮渡", "行业:其他城市公共交通", "行业:水上旅客运输", "行业:水上货物运输",
                      "行业:水上运输辅助活动", "行业:航空客货运输", "行业:通用航空服务", "行业:航空运输辅助活动", "行业:管道运输业", "行业:谷物及其他作物的种植",
                      "行业:蔬菜、园艺作物的种植", "行业:水果、坚果、饮料和香料作物的种植", "行业:中药材的种植", "行业:林木的培育和种植", "行业:木材和竹材的采运", "行业:林产品的采集",
                      "行业:牲畜的饲养", "行业:猪的饲养", "行业:家禽的饲养", "行业:狩猎和捕捉动物", "行业:其他畜牧业", "行业:海洋渔业", "行业:内陆渔业", "行业:农业服务业",
                      "行业:林业服务业", "行业:畜牧服务业", "行业:渔业服务业", "行业:烟煤和无烟煤的开采洗选", "行业:褐煤的开采洗选", "行业:其他煤炭采选", "行业:天然原油和天然气开采",
                      "行业:与石油和天然气开采有关的服务活动", "行业:铁矿采选", "行业:其他黑色金属矿采选", "行业:常用有色金属矿采选", "行业:贵金属矿采选", "行业:稀有稀土金属矿采选",
                      "行业:土砂石开采", "行业:化学矿采选", "行业:采盐", "行业:石棉及其他非金属矿采选", "行业:其他采矿业", "行业:精制茶加工", "行业:酒精制造", "行业:酒的制造",
                      "行业:软饮料制造", "行业:泵、阀门、压缩机及类似机械的制造", "行业:通用零部件制造及机械修理", "行业:锅炉及原动机制造", "行业:金属加工机械制造", "行业:起重运输设备制造",
                      "行业:轴承、齿轮、传动和驱动部件的制造", "行业:烘炉、熔炉及电炉制造", "行业:风机、衡器、包装设备等通用设备制造", "行业:金属铸、锻加工",
                      "行业:印刷、制药、日化生产专用设备制造", "行业:矿山、冶金、建筑专用设备制造", "行业:化工、木材、非金属加工专用设备制造", "行业:食品、饮料、烟草及饲料生产专用设备制造",
                      "行业:纺织、服装和皮革工业专用设备制造", "行业:电子和电工机械专用设备制造", "行业:农、林、牧、渔专用机械制造", "行业:医疗仪器设备及器械制造",
                      "行业:环保、社会公共安全及其他专用设备制造", "行业:烟叶复烤", "行业:卷烟制造", "行业:其他烟草制品加工", "行业:棉、化纤纺织及印染精加工", "行业:纺织制成品制造",
                      "行业:毛纺织和染整精加工", "行业:麻纺织", "行业:丝绢纺织及精加工", "行业:针织品、编织品及其制品制造", "行业:制帽", "行业:纺织服装制造", "行业:纺织面料鞋的制造",
                      "行业:常用有色金属冶炼", "行业:贵金属冶炼", "行业:稀有稀土金属冶炼", "行业:有色金属合金制造", "行业:有色金属压延加工", "行业:不锈钢及类似日用金属制品制造",
                      "行业:搪瓷制品制造", "行业:其他金属制品制造", "行业:结构性金属制品制造", "行业:金属工具制造", "行业:集装箱及金属包装容器制造", "行业:金属丝绳及其制品的制造",
                      "行业:建筑、安全用金属制品制造", "行业:金属表面处理及热处理加工", "行业:铁路运输设备制造", "行业:汽车制造", "行业:摩托车制造", "行业:自行车制造",
                      "行业:船舶及浮动装置制造", "行业:航空航天器制造", "行业:交通器材及其他交通运输设备制造", "行业:电机制造", "行业:输配电及控制设备制造",
                      "行业:电线、电缆、光缆及电工器材制造", "行业:电池制造", "行业:家用电力器具制造", "行业:非电力家用器具制造", "行业:照明器具制造", "行业:其他电气机械及器材制造",
                      "行业:通信设备制造", "行业:雷达及配套设备制造", "行业:广播电视设备制造", "行业:电子计算机制造", "行业:电子器件制造", "行业:电子元件制造", "行业:家用视听设备制造",
                      "行业:其他电子设备制造", "行业:通用仪器仪表制造", "行业:专用仪器仪表制造", "行业:钟表与计时仪器制造", "行业:光学仪器及眼镜制造", "行业:文化、办公用机械制造",
                      "行业:其他仪器仪表的制造及修理", "行业:工艺美术品制造", "行业:日用杂品制造", "行业:煤制品制造", "行业:核辐射加工", "行业:其他未列明的制造业",
                      "行业:金属废料和碎屑的加工处理", "行业:非金属废料和碎屑的加工处理", "行业:谷物磨制", "行业:饲料加工", "行业:植物油加工", "行业:制糖", "行业:屠宰及肉类加工",
                      "行业:水产品加工", "行业:蔬菜、水果和坚果加工", "行业:其他农副食品加工", "行业:方便食品制造", "行业:其他食品制造", "行业:糖果、巧克力及蜜饯制造",
                      "行业:液体乳及乳制品制造", "行业:罐头制造", "行业:调味品、发酵制品制造", "行业:焙烤食品制造", "行业:皮革鞣制加工", "行业:皮革制品制造", "行业:毛皮鞣制及制品加工",
                      "行业:羽毛(绒)加工及制品制造", "行业:锯材、木片加工", "行业:人造板制造", "行业:木制品制造", "行业:竹、藤、棕、草制品制造", "行业:木质家具制造",
                      "行业:竹、藤家具制造", "行业:金属家具制造", "行业:塑料家具制造", "行业:其他家具制造", "行业:纸浆制造", "行业:造纸", "行业:纸制品制造", "行业:印刷",
                      "行业:装订及其他印刷服务活动", "行业:记录媒介的复制", "行业:文化用品制造", "行业:体育用品制造", "行业:乐器制造", "行业:玩具制造", "行业:游艺器材及娱乐用品制造",
                      "行业:精炼石油产品的制造", "行业:炼焦", "行业:核燃料加工", "行业:基础化学原料制造", "行业:肥料制造", "行业:农药制造", "行业:涂料、油墨、颜料及类似产品制造",
                      "行业:合成材料制造", "行业:专用化学产品制造", "行业:日用化学产品制造", "行业:化学药品原药制造", "行业:化学药品制剂制造", "行业:中药饮片加工", "行业:中成药制造",
                      "行业:兽用药品制造", "行业:生物、生化制品的制造", "行业:卫生材料及医药用品制造", "行业:纤维素纤维原料及纤维制造", "行业:合成纤维制造", "行业:轮胎制造",
                      "行业:橡胶板、管、带的制造", "行业:橡胶零件制造", "行业:再生橡胶制造", "行业:日用及医用橡胶制品制造", "行业:橡胶靴鞋制造", "行业:其他橡胶制品制造",
                      "行业:塑料薄膜制造", "行业:塑料板、管、型材的制造", "行业:塑料丝、绳及编织品的制造", "行业:泡沫塑料制造", "行业:塑料人造革、合成革制造", "行业:塑料包装箱及容器制造",
                      "行业:塑料零件制造", "行业:日用塑料制造", "行业:其他塑料制品制造", "行业:水泥、石灰和石膏的制造", "行业:水泥及石膏制品制造", "行业:砖瓦、石材及其他建筑材料制造",
                      "行业:玻璃及玻璃制品制造", "行业:陶瓷制品制造", "行业:耐火材料制品制造", "行业:石墨及其他非金属矿物制品制造", "行业:钢压延加工", "行业:铁合金冶炼", "行业:炼铁",
                      "行业:炼钢"]
        self.num = 0

        self.pageurl = "http://www.wanfangdata.com.cn/search/searchList.do?beetlansyId=aysnsearch&searchType=tech_result&pageSize=50&page={}&searchWord={}&order=correlation&showType=detail&isCheck=check&isHit=&isHitUnit=&firstAuthor=false&rangeParame=&navSearchType=tech_result"

        self.yearpageurl = "http://www.wanfangdata.com.cn/search/searchList.do?beetlansyId=aysnsearch&searchType=tech_result&pageSize=50&page={}&searchWord={}&order=correlation&showType=detail&isCheck=check&isHit=&isHitUnit=&facetField=$common_year:{}&facetName={}:$common_year&firstAuthor=false&rangeParame=&navSearchType=tech_result"

        self.configfile = BaseDir.get_new_path(curpath, "db.ini")
        self.logger = facade.get_streamlogger()
        self.mysqlutils = facade.MysqlUtiles(self.configfile, "db", self.logger)

    def down_page(self, num, word):
        """
        由于小于5000 不进行下一步细分直接下载
        :return:
        """
        for i in range(1, (num - 1) // 50 + 2):
            filePath = BaseDir.get_new_path(searchDir, word.replace(":", "") + str(i) + ".html")
            if BaseDir.is_file_exists(filePath):
                print("文件存在")
                sql = "update downpage set stat=1 where filename='{}'".format(word.replace(":", "") + str(i) + ".html")
                self.mysqlutils.ExeSqlToDB(sql)
                continue
            url = self.pageurl.format(i, word)
            BoolResult, errString, r = facade.BaseRequest(url, endstring="")
            time.sleep(1)
            if BoolResult:
                print("保存文件到:" + filePath)
                BaseDir.single_write_file(r.text, filePath)
                sql = "update downpage set stat=1 where filename='{}'".format(word.replace(":", "") + str(i) + ".html")
                self.mysqlutils.ExeSqlToDB(sql)
            else:
                print("下载错误")
                print(errString)
                try:
                    print(r.text)
                except:
                    pass

    def down_page_num(self, word):
        """
        由于数量大于5000就无法分页了,所以需要在搜索后进行下一步的细分
        可以是年或者地区, 但都没有搜索出来的量多 尝试按年分后统计
        这是按年下载
        :return:
        """
        # url = "http://www.wanfangdata.com.cn/search/searchList.do?searchType=tech_result&searchWord={}&facetField=$common_year:{}&showType=detail&pageSize=50&facetName={}:$common_year&isHit=&isHitUnit=&navSearchType=tech_result&firstAuthor=false&rangeParame="
        for year in self.yearset:
            sql = "select stat from downpage where `year`='{}' and `word`='{}'".format(year, word)
            rows = self.mysqlutils.SelectFromDB(sql)
            if rows:
                is_continue = True
                for row in rows:
                    if row[0] == 0:
                        is_continue = False
                if is_continue:
                    print("year {} 下载完成".format(year))
                    continue
            self.year_dicts["facetField"] = "$common_year:{}".format(year)
            self.year_dicts["facetName"] = "{}:$common_year".format(year)
            print(self.year_dicts)
            BoolResult, errString, r = facade.BaseRequest(self.year_url, params=self.year_dicts)
            time.sleep(1)
            if BoolResult:
                selector = Selector(text=r.text)
                num = selector.xpath('//*[@id="here"]/div[3]/div[5]/div[3]/span/text()').get()
                BaseDir.single_write_file(r.text, "./test.html")
                print("num is :" + str(num))
                if not num:
                    BaseDir.single_write_file(r.text, "./test.html")
                    continue
                if int(num) > 5000:
                    print("按年分后还是大于5000 要想另外的方式收集 先下载这个5000")
                    num = 5000
                self.set_mysql_year(int(num), word, year)
                for i in range(1, (int(num) - 1) // 50 + 2):
                    if BaseDir.is_file_exists(
                            BaseDir.get_new_path(searchDir, word.replace(":", "") + year + str(i) + ".html")):
                        print("文件存在")
                        sql = "update downpage set stat=1 where filename='{}'".format(
                            word.replace(":", "") + year + str(i) + ".html")
                        self.mysqlutils.ExeSqlToDB(sql)
                        continue
                    url = self.yearpageurl.format(i, word, year, year)
                    BoolResult, errString, r = facade.BaseRequest(url,
                                                                  endstring="")
                    time.sleep(1)
                    if BoolResult:
                        print(
                            "保存到文件" + BaseDir.get_new_path(searchDir, word.replace(":", "") + year + str(i) + ".html"))
                        BaseDir.single_write_file(r.text,
                                                  BaseDir.get_new_path(searchDir,
                                                                       word.replace(":", "") + year + str(i) + ".html"))
                        sql = "update downpage set stat=1 where filename='{}'".format(
                            word.replace(":", "") + year + str(i) + ".html")
                        self.mysqlutils.ExeSqlToDB(sql)
                    else:
                        print("下载错误")
                        print(errString)
                        try:
                            BaseDir.single_write_file(r.text, "./test.html")
                        except:
                            pass
            else:
                print("按年下载错误" + errString)
                sys.exit(-1)

    def create_year_date(self, selector):
        searchType = selector.xpath('//*[@id="resourceType"]/@value').get()
        searchWord = selector.xpath('//*[@id="resourceSearchWord"]/@value').get()
        facetField = "$common_year:{}"
        showType = selector.xpath('//*[@id="showType"]/@value').get()
        pageSize = "50"
        facetName = "{}:$common_year"
        isHit = selector.xpath('//*[@id="isHit"]/@value').get()
        isHitUnit = selector.xpath('//*[@id="isHitUnit"]/@value').get()
        navSearchType = selector.xpath('//*[@id="navSearchType"]/@value').get()
        firstAuthor = "false"
        rangeParam = selector.xpath('//*[@id="rangeParamHD"]/@value').get()

        self.year_dicts = {
            "searchType": searchType,
            "searchWord": searchWord,
            "facetField": facetField,
            "showType": showType,
            "pageSize": pageSize,
            "facetName": facetName,
            "isHit": isHit,
            "isHitUnit": isHitUnit,
            "navSearchType": navSearchType,
            "firstAuthor": firstAuthor,
            "rangeParam": rangeParam
        }

        self.year_url = "http://www.wanfangdata.com.cn/search/searchList.do"

    def create_post_date(self, selector):
        """
        有时候一个行业分类超过500 需要按年下载
        先获取年份 这里是获取年份的post数据
        :param selector:
        :return:
        """
        searchWord = selector.xpath('//*[@id="firstParam"]/@value').get()
        searchType = selector.xpath('//*[@id="resourceType"]/@value').get()
        isHit = selector.xpath('//*[@id="isHit"]/@value').get()
        startYear = selector.xpath('//*[@id="i_startYear"]/@value').get()
        endYear = selector.xpath('//*[@id="i_endYear"]/@value').get()
        hqfwfacetField = selector.xpath('//*[@id="facetField"]/@value').get()
        navSearchType = selector.xpath('//*[@id="navSearchType"]/@value').get()
        single = "true"
        limit = "11"
        facetField = "$common_year"
        searchWord = "({})".format(searchWord)

        self.postdate = {
            "searchWord": searchWord,
            "searchType": searchType,
            "isHit": isHit,
            "startYear": startYear,
            "endYear": endYear,
            "hqfwfacetField": hqfwfacetField,
            "navSearchType": navSearchType,
            "single": single,
            "limit": limit,
            "facetField": facetField
        }

    def down_year(self):
        self.yearset.clear()
        url = "http://www.wanfangdata.com.cn/search/navigation.do"
        BoolResult, errString, r = facade.BaseRequestPost(url,
                                                          endstring="",
                                                          data=self.postdate)
        time.sleep(1)
        if BoolResult:
            dicts = json.loads(r.text)
            array = dicts["facetTree"]
            for yeardicts in array:
                year = yeardicts["value"]
                if len(year) == 4 and year.isdigit():
                    self.yearset.add(year)
        else:
            print("下载年份失败" + errString)
            return False
        return True

    def set_mysql_no_year(self, num, word):
        for i in range(1, (num - 1) // 50 + 2):
            filename = word.replace(":", "") + str(i) + ".html"
            sql = "replace into downpage (`word`,`page`,`year`,`filename`) value ('%s','%s','%s','%s')"
            sql = sql % (word, str(i), '', filename)
            self.mysqlutils.ExeSqlToDB(sql)

    def set_mysql_year(self, num, word, year):
        for i in range(1, (num - 1) // 50 + 2):
            filename = word.replace(":", "") + year + str(i) + ".html"
            sql = "replace into downpage (`word`,`page`,`year`,`filename`) value ('%s','%s','%s','%s')"
            sql = sql % (word, str(i), year, filename)
            self.mysqlutils.ExeSqlToDB(sql)

    def down_sub(self, i):
        """
        按学科分类下载
        :return:
        """
        sql = "select word_stat from downpage where word='{}'".format(self.list4[i])
        rows = self.mysqlutils.SelectFromDB(sql)
        if rows:
            if rows[0][0] == 1:
                return
        BoolResult, errString, r = facade.BaseRequest(self.url.format(self.list4[i]), endstring="")
        time.sleep(1)
        if BoolResult:
            selector = Selector(text=r.text)
            num = selector.xpath('//*[@id="here"]/div[3]/div[4]/div[3]/span/text()').get()
            if num is not None:
                self.num += int(num)
                if int(num) <= 5000:
                    # 如果总量小于5000 可以下载完
                    self.set_mysql_no_year(int(num), self.list4[i])
                    self.down_page(int(num), self.list4[i])
                else:
                    # 先下载5000
                    self.down_page(5000, self.list4[i])
                    self.create_post_date(selector)
                    self.down_year()
                    self.create_year_date(selector)
                    self.down_page_num(self.list4[i])

                print("this :" + num)
            print("all :" + str(self.num))
            sql = "update downpage set word_stat=1 where word='{}'".format(self.list4[i])
            self.mysqlutils.ExeSqlToDB(sql)
        else:
            print("下载错误")


if __name__ == "__main__":
    searh = Search()
    # 下次更新时执行
    # sql = "update downpage set word_stat=0"
    # searh.mysqlutils.ExeSqlToDB(sql)
    for i in range(0, len(searh.list4)):
        searh.down_sub(i)
        time.sleep(1)
